const fs = require('fs')
const path = require('path')

/**
 * 同步读取
 * */
function readFile(filePath) {
    // const res = fs.readFileSync(filePath).toString()
    // 或者
    const res = fs.readFileSync(filePath, 'utf-8')
    console.log(res)
}

// readFile(path.join(__dirname, './资源.json'))

/**
 * 异步读取
 * */
function readFileAsync(filePath) {
    fs.readFile(filePath, 'utf8', (err, data) => {
        if (err) {
            console.error('读取文件出错', err);
        } else {
            console.log(data);
        }
    });
}

// readFileAsync(path.join(__dirname, './资源.json'))

/**
 * 流式读取
 * 流式读取更加灵活高效，它可以逐块读取文件内容，而不是一次性将整个文件加载到内存中。这对于处理大文件非常有用
 * */
function readFileStream(filePath) {
    // 流式读取 createReadStream（这里以 "三字经.txt" 为例）
    const rs = fs.createReadStream(filePath);

    // 绑定data事件，每次读取到数据块时触发
    rs.on('data', chunk => {
        // console.log(chunk);
        console.log(chunk.toString());
        // chunk 是一个 Buffer 对象，代表读取到的数据块
        // 处理文本文件时，可将Buffer对象转换为字符串：chunk.toString()
    });

    // 绑定end事件，读取完成时触发
    rs.on('end', () => {
        console.log("读取完成");
    });

    // 绑定error事件，读取过程中发生错误时触发
    rs.on('error', err => {
        console.error("读取错误：", err);
    });
}

readFileStream(path.join(__dirname, './资源.json'))